verilog中的assign(二) |
您所在的位置:网站首页 › verilog assign用法 › verilog中的assign(二) |
一、引入语法的概念 1、只有寄存器类型的信号才可以在always和initial 语句中进行赋值,类型定义通过reg语句实现。 2、always 语句是一直重复执行,由敏感表(always 语句括号内的变量)中的变量触发。 3、always 语句从0 时刻开始。 4、在begin 和end 之间的语句是顺序执行,属于串行语句。
二、总结下几种assign用法: 1.作为信号量输出,通过寄存器连续赋值 output [3:0]oLED; //internal signal reg [3:0]sr_LED; //用独热码表示LED亮灯位置。 assign oLED[3:0] = ~ sr_LED[3:0]; //向LED灯接口输出信号。 2.作为信号量输出,通过寄存器拼接数据位实现。
output [15: 0] oSI_DATA; //internal signal reg [ 3: 0] s_HEX; reg [ 7: 0] s_SEGBINARY; // s_SEGBINARY[2] should be the DOT reg [ 3: 0] s_SEG_SEL; assign oSI_DATA = {iLED_SEL,s_SEG_SEL,s_SEGBINARY}; 3.作为信号量输出,通过判断条件,赋值给信号
output[ 1: 0] oSEG_STATE; output oCP_PLUSE; wire s_CNTEQCYCLE; parameter PARAM_7SEG_CYCLE = 32'd2500000; reg [ 1: 0] sr_SEG_STATE; reg [31: 0] sr_cnt; reg sr_cp_pluse; assign oSEG_STATE = sr_SEG_STATE; assign oCP_PLUSE = sr_cp_pluse;
assign s_CNTEQCYCLE = ( sr_cnt == PARAM_7SEG_CYCLE ) ? 1 : 0;
4.作为输出信号量,通过输入信号量赋值给输出,同样可以输入信号量和寄存器组合逻辑,赋值给输出信号量。 input iCLK50M; input iCP_PULSE; input[15:0] iSI_DATA; output oSI; output oCP; reg [ 3: 0] sr_cnt; reg [15: 0] sr_si_data; reg sr_cp; reg sr_en; assign oSI = sr_si_data[15]; assign oCP = sr_en & iCLK50M; 三、对比输出寄存器变量和信号量 下面是功能相同但写法不同的两段代码: 第一段A module assign_test_a ( clk, lhold, lholda ); input clk; input lhold; output lholda; reg lholda; always @(posedge clk) if (lhold) lholda |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |